package com.ww.springboot.boot.algorithm.tree;

/**
 * 描述：二叉树实现
 * <p>
 * 填充顺序  中 -》左-》右
 * 遍历顺序  左序 右序 中序
 *
 * 前序 中序 后序
 *
 * 前序:先本节点 再左节点 再右节点
 * 中序:先左节点 再中节点 再右节点
 * 后序:先右节点 再左节点 再本节点
 *
 *
 * @author 🧑 ‍wanwei
 * @since 2022-01-06 17:29
 */
public class TwoTreeDemo2 {

    private static int i = 0;

    public static void main(String[] args) {
        int[] arrays = {1, 2, 4, 0, 0, 0, 3, 0, 5, 0, 0};
        TreeNode treeNode = new TreeNode();
        setValue(i, treeNode, arrays);
        System.out.println(treeNode);

        //左序遍历
        //getLeftValue(treeNode);
    }

    /**
     * 左序遍历
     *
     * @param treeNode
     */
    private static void getLeftValue(TreeNode treeNode) {
        if (treeNode == null) {
            return;
        }
        System.out.println(treeNode.getVal());
        getLeftValue(treeNode.getLeft());
        getLeftValue(treeNode.getRight());
    }

    /**
     * 前序遍历填充
     *
     * @param index
     * @param treeNode
     */
    public static void setValue(int index, TreeNode treeNode, int[] arrays) {
        if (index > arrays.length - 1) {
            return;
        }
        if (arrays[index] == 0) {
            return;
        }
        treeNode.setVal(arrays[index]);
        treeNode.setLeft(new TreeNode());
        setValue(++i, treeNode.getLeft(), arrays);
        treeNode.setRight(new TreeNode());
        setValue(++i, treeNode.getRight(), arrays);
    }

    /**
     * 前序遍历填充
     *
     * @param treeNode
     */
    public static void setValue(TreeNode treeNode, int[] arrays) {
        int index = 0;
        treeNode.setVal(arrays[index]);
        if (arrays[index] == 0) {
            return;
        }
        treeNode.setLeft(new TreeNode());
        setValue(++i, treeNode.getLeft(), arrays);
        treeNode.setRight(new TreeNode());
        setValue(++i, treeNode.getRight(), arrays);
    }
}
